package pickbook.controller;

import java.util.HashMap;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import pickbook.model.ListVO;
import pickbook.model.MemberVO;
import pickbook.model.SaleBookService;
import pickbook.model.SaleBookVO;

//판매도서 관련 컨트롤러 정의
@Controller
public class SaleBookController {
	
	@Resource(name = "saleBookServiceImpl")
	private SaleBookService saleBookService;
	
	/**
	 * method : getSearchListByFactor
	 * comment : 검색어(factor)에 해당하는 책 정보를 찾는 메서드
	 * 
	 * @param factor
	 * @return
	 * 
	 * @author 이형철
	 * @date 2014-07-04
	 */
	@RequestMapping("searchsalelistbyfactor.do")
	public ModelAndView getSearchListByFactor(String factor, String pageNo) {
		
		ModelAndView mv = new ModelAndView();
		
		ListVO lvo = saleBookService.getSearchListByFactor(factor, pageNo);//판매도서 검색어 검색결과 목록
		
		if(lvo.getList().size()==0){//검색결과가 없을 경우
			mv = new ModelAndView("book.searchsalebookbyfactor/list", "noData", false);
		}else{//있을 경우
			mv.addObject("searchsalebookbyfactorlvo", lvo);
			mv.setViewName("book.searchsalebookbyfactor/list");
			mv.addObject("factor", factor);//페이징을 위해 검색어 재반환
		}
		
		return mv;
		
	}

	/**
	 * method : getSearchListByLocationUniv
	 * comment : 위치(location)과 대학교(univ)에 해당하는 책 정보를 찾는 메서드
	 * 
	 * @param location
	 * @param univ
	 * @return
	 * 
	 * @author 이형철
	 * @date 2014-07-04
	 */
	@RequestMapping("searchsalelistbylocationuniv.do")
	public ModelAndView getSearchListByLocationUniv(String location, String univ, String pageNo){

		ModelAndView mv = new ModelAndView();
		
		ListVO lvo = saleBookService.getSearchListByLocationUniv(location, univ, pageNo);//판매도서 지역,대학 검색결과 목록
		
		if(lvo.getList().size()==0){//검색결과가 존재하지 않을 경우
			mv = new ModelAndView("book.searchsalebookbylocationuniv/list", "noData", false);	
		}else{//있을 경우
			mv.addObject("searchsalebookbylocationunivlvo", lvo);
			mv.setViewName("book.searchsalebookbylocationuniv/list");
			mv.addObject("location", location);//페이징을 위해 지역정보 재반환
			mv.addObject("univ", univ);//페이징을 위해 대학명 재반환
		}
		
		return mv;
		
	}

	/**
	 * method : moveRegister
	 * comment : 판매도서 목록에서 추가페이지 이동 메서드
	 * 
	 * @return
	 * 
	 * @author 제형규, 김병각
	 * @date 2014-07-03 
	 */
	@RequestMapping("auth_moveSaleRegister.do")
	public String moveRegister(){
		
		return "book.salebook/register";
		
	}
	
	/**
	 * method : insertBook
	 * comment : 판매도서 추가 메서드
	 * 
	 * @param sbvo
	 * @return
	 * 
	 * @author 제형규, 김병각
	 * @date 2014-07-03
	 */
	@RequestMapping("book_salebook_register.do")
	public String insertBook(SaleBookVO sbvo, HttpSession session) {
		
		MemberVO mvo = (MemberVO) session.getAttribute("mvo");
		
		sbvo.setMvo(mvo);
		sbvo.setbVisible(1);//판매도서 등록 후 바로 노출해주기 위해 default 설정
		
		if(sbvo.getImage().equals("0")){//판매도서 등록 시 이미지가 없을 경우, default 표지 설정
			sbvo.setImage("http://localhost:8888/pickbook-v0.1/img/nocover.png");
		}
		
		saleBookService.insertBook(sbvo);//판매도서 등록
		
		return "redirect:book_salebook_list.do";
		
	}
	
	/**
	 * method : saleUpdate
	 * comment : 나의 판매도서 수정 페이지로 이동하는 메서드
	 * 
	 * @param no
	 * @return
	 * 
	 * @author 제형규, 김병각
	 * @date 2014-07-03 
	 */
	@RequestMapping("auth_moveSaleUpdate.do")
	public ModelAndView saleUpdate(int no){
		
		SaleBookVO sbvo=saleBookService.findByBookNo(no);//책번호를 통해 판매도서 정보 반환
		
		return new ModelAndView("book.salebook/update","sbvo",sbvo);
		
	}
	
	/**
	 * method : updateBook
	 * comment : 나의 판매도서 수정하는 메서드
	 * 
	 * @param sbvo
	 * @return
	 * 
	 * @author 제형규, 김병각
	 * @date 2014-07-03 
	 */
	@RequestMapping("auth_book_salebook_update.do")
	public String updateBook(SaleBookVO sbvo, int no) {
		
		sbvo.setNo(no);
		saleBookService.updateBook(sbvo);//판매도서 정보 수정
		
		return "book.salebook/updateOK";
		
	}
	/**
	 * method : deleteBook
	 * comment : 나의 판매도서 삭제하는 메서드
	 * 
	 * @param no
	 * @return
	 * 
	 * @author 제형규, 김병각
	 * @date 2014-07-03 
	 */
	@RequestMapping("auth_deleteSaleBook.do")
	public String deleteBook(int no) {
		
		saleBookService.deleteBook(no);//판매도서 삭제
		
		return "redirect:auth_book_mysalebook_list.do";
		
	}

	/**
	 * method : getRecentBookList
	 * comment : 최신판매도서 리스트를 전달하는 메서드
	 * 
	 * @param pageNo
	 * @return
	 * 
	 * @author 제형규, 이형철
	 * @date 2014-07-02
	 */
	@RequestMapping("book_salebook_list.do")
	public ModelAndView getRecentBookList(String pageNo) {
		
		ModelAndView mv = new ModelAndView();
		
		ListVO lvo = saleBookService.getRecentBookList(pageNo);//최근판매도서 목록 반환
		
		if(lvo.getList().size()==0){//존재하지 않을 경우
			mv=new ModelAndView("book.salebook/list","noData",false);
		}else{//존재할 경우
			mv.addObject("salebooklvo", lvo);
			mv.setViewName("book.salebook/list");
		}
		
		return mv;
		
	}
	
	/**
	 * method : getMySaleBookList
	 * comment : 나의 최신판매도서 리스트를 전달하는 메서드
	 * 
	 * @param pageNo
	 * @return
	 * 
	 * @author 이형철
	 * @date 2014-07-03
	 */
	@RequestMapping("auth_book_mysalebook_list.do")
	public ModelAndView getMySaleBookList(HttpSession session, String pageNo){
		
		ModelAndView mv = new ModelAndView();
		
		MemberVO mvo = (MemberVO) session.getAttribute("mvo");
		String id = mvo.getId();
		
		ListVO lvo = saleBookService.getMySaleBookList(pageNo, id);//나의판매도서 목록 반환
		
		if(lvo.getList().size()==0){//존재하지 않을 경우
			mv=new ModelAndView("book.mysalebook/list","noData",false);
		}else{//존재할 경우
			mv.addObject("mysalebooklvo", lvo);
			mv.setViewName("book.mysalebook/list");
		}
		
		return mv;
		
	}
	
	/**
	 * method : visibleBook
	 * comment : 나의 판매도서 공개 여부를 업데이트하는 메서드
	 * 
	 * @param no
	 * @param visible
	 * @return
	 * 
	 * @author 이형철
	 * @date 2014-07-03
	 */
	@RequestMapping("saleBookVisible.do")
	@ResponseBody
	public HashMap visibleBook(int no, int bVisible) {
		
		HashMap map=new HashMap();
		map.put("flag", saleBookService.updateVisible(no, bVisible));//판매도서 공개여부 수정
		
		return map;
		
	}

}
